@using BTCPayServer.Views.Apps
@using BTCPayServer.Client
@using BTCPayServer.Plugins.PointOfSale
@using BTCPayServer.Forms
@using BTCPayServer.TagHelpers
@using Microsoft.AspNetCore.Mvc.TagHelpers
@inject FormDataService FormDataService
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
@model BTCPayServer.Plugins.PointOfSale.Models.UpdatePointOfSaleViewModel
@{
    ViewData.SetLayoutModel(new($"{nameof(PointOfSalePlugin)}-{Model.Id}",StringLocalizer["Update Point of Sale"]));
	Csp.UnsafeEval();
    var checkoutFormOptions = await FormDataService.GetSelect(Model.StoreId, Model.FormId);
    var posPath = Url.Action("ViewPointOfSale", "UIPointOfSale", new { appId = Model.Id });
    var posUrl = Url.ActionAbsolute(this.Context.Request, "ViewPointOfSale", "UIPointOfSale", new { appId = Model.Id }).AbsoluteUri;
}

@section PageHeadContent {
    <link href="~/vendor/highlightjs/default.min.css" rel="stylesheet" asp-append-version="true">
    <link href="~/vendor/summernote/summernote-bs5.css" rel="stylesheet" asp-append-version="true" />
    <link href="~/vendor/vue-qrcode-reader/vue-qrcode-reader.css" rel="stylesheet" asp-append-version="true" />
}

@section PageFootContent {
    <partial name="_ValidationScriptsPartial" />
    <script src="~/vendor/summernote/summernote-bs5.js" asp-append-version="true"></script>
    <script src="~/pos/admin.js" asp-append-version="true"></script>
}

<form method="post" permissioned="@Policies.CanModifyStoreSettings">
    <div class="sticky-header">
        <h2>@ViewData["Title"]</h2>
        <div>
            <button id="page-primary" type="submit" class="btn btn-primary order-sm-1">Save</button>
            <a class="btn btn-secondary" asp-action="ListInvoices" asp-controller="UIInvoice" asp-route-storeId="@Model.StoreId" asp-route-searchterm="@Model.SearchTerm" text-translate="true">Invoices</a>
            @if (Model.Archived)
            {
                <button type="submit" class="btn btn-outline-secondary" name="Archived" value="False" text-translate="true">Unarchive</button>
            }
            else
            {
                <div class="btn-group" role="group" aria-label="View Point of Sale">
                    <a class="btn btn-secondary" asp-controller="UIPointOfSale" asp-action="ViewPointOfSale" asp-route-appId="@Model.Id" id="ViewApp" target="_blank" text-translate="true">View</a>
                    <button type="button" class="btn btn-secondary px-3 d-inline-flex align-items-center" data-bs-toggle="modal" data-bs-target="#OpenPosModal">
                        <vc:icon symbol="qr-code" />
                    </button>
                </div>
            }
        </div>
    </div>

    <partial name="_StatusMessage" />

    <input type="hidden" asp-for="StoreId" />
    <input type="hidden" asp-for="Archived" />

    @if (!ViewContext.ModelState.IsValid)
    {
        <div asp-validation-summary="All" class="@(ViewContext.ModelState.ErrorCount.Equals(1) ? "no-marker" : "")"></div>
    }
    <div class="row" style="max-width:540px;">
        <div class="col-sm-6">
            <div class="form-group">
                <label asp-for="AppName" class="form-label" data-required></label>
                <input asp-for="AppName" class="form-control" required />
                <span asp-validation-for="AppName" class="text-danger"></span>
            </div>
        </div>
        <div class="col-sm-6">
            <div class="form-group">
                <label asp-for="Title" class="form-label" data-required></label>
                <input asp-for="Title" class="form-control" required />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="DefaultView" class="form-label" data-required text-translate="true">Choose Point of Sale Style</label>
            <div class="btcpay-list-select">
                @foreach (var type in Enum.GetValues<PosViewType>())
                {
                    <input type="radio" asp-for="DefaultView" value="@type" id="DefaultView_@type">
                    <label for="DefaultView_@type" class="btcpay-list-select-item">
                        <vc:icon symbol="pos-@type.ToString().ToLowerInvariant()" />
                        @typeof(PosViewType).DisplayName(type.ToString())
                    </label>
                }
            </div>
        </div>
        <div class="form-group mb-0">
            <label asp-for="Currency" class="form-label"></label>
            <input asp-for="Currency" class="form-control w-auto" currency-selection />
            <div class="form-text">@StringLocalizer["Uses the store's default currency ({0}) if empty.", Model.StoreDefaultCurrency]</div>
            <span asp-validation-for="Currency" class="text-danger"></span>
        </div>
    </div>

    <div id="description" class="row mt-4">
        <div class="col-xxl-constrain">
            <div class="form-group mb-0">
                <label asp-for="Description" class="form-label"></label>
                <textarea asp-for="Description" rows="10" cols="40" class="form-control richtext"></textarea>
                <span asp-validation-for="Description" class="text-danger"></span>
            </div>
        </div>
    </div>
    <div id="products" class="row">
        <div class="col-xxl-constrain">
            <partial name="TemplateEditor" model="@(nameof(Model.Template), Model.Template, "Products", Model.Currency ?? Model.StoreDefaultCurrency)" />
        </div>
    </div>
    <div class="row mt-5">
        <div class="col-sm-10 col-md-9 col-xl-7 col-xxl-6">
            <h3 class="mb-4" text-translate="true">Checkout</h3>
            <fieldset>
                <div class="form-group" id="button-price-text">
                    <label asp-for="ButtonText" class="form-label" data-required></label>
                    <input asp-for="ButtonText" class="form-control" required />
                    <span asp-validation-for="ButtonText" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="FormId" class="form-label"></label>
                    <select asp-for="FormId" class="form-select w-auto" asp-items="@checkoutFormOptions"></select>
                    <span asp-validation-for="FormId" class="text-danger"></span>
                </div>
            </fieldset>
            <fieldset id="keypad-display" class="mt-2">
                <legend class="h5 mb-3 fw-semibold" text-translate="true">Keypad</legend>
                <div class="form-group d-flex align-items-center pt-2">
                    <input asp-for="ShowItems" type="checkbox" class="btcpay-toggle me-3" />
                    <label asp-for="ShowItems" class="form-label mb-0"></label>
                    <span asp-validation-for="ShowItems" class="text-danger"></span>
                </div>
            </fieldset>
            <fieldset id="cart-display" class="mt-2">
                <legend class="h5 mb-3 fw-semibold">Cart</legend>
                <div class="form-group d-flex align-items-center pt-2">
                    <input asp-for="ShowSearch" type="checkbox" class="btcpay-toggle me-3" />
                    <label asp-for="ShowSearch" class="form-check-label"></label>
                    <span asp-validation-for="ShowSearch" class="text-danger"></span>
                </div>
                <div class="form-group d-flex align-items-center">
                    <input asp-for="ShowCategories" type="checkbox" class="btcpay-toggle me-3" />
                    <label asp-for="ShowCategories" class="form-check-label"></label>
                    <span asp-validation-for="ShowCategories" class="text-danger"></span>
                </div>
            </fieldset>
            <fieldset id="tips" class="mt-2">
                <legend class="h5 mb-3 fw-semibold" text-translate="true">Tips</legend>
                <div class="form-group d-flex align-items-center pt-2">
                    <input asp-for="EnableTips" type="checkbox" class="btcpay-toggle me-3" data-bs-toggle="collapse" data-bs-target="#CustomTipsSettings" aria-expanded="@Model.EnableTips" aria-controls="CustomTipsSettings" />
                    <label asp-for="EnableTips" class="form-check-label"></label>
                    <span asp-validation-for="EnableTips" class="text-danger"></span>
                </div>
                <div class="collapse @(Model.EnableTips ? "show" : "")" id="CustomTipsSettings">
                    <div class="form-group">
                        <label asp-for="CustomTipText" class="form-label" data-required></label>
                        <input asp-for="CustomTipText" class="form-control" required />
                        <span asp-validation-for="CustomTipText" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="CustomTipPercentages" class="form-label"></label>
                        <input asp-for="CustomTipPercentages" class="form-control" />
                        <span asp-validation-for="CustomTipPercentages" class="text-danger"></span>
                    </div>
                </div>
            </fieldset>

            <fieldset id="taxes" class="mt-2">
                <legend class="h5 mb-3 fw-semibold" text-translate="true">Taxes</legend>
                <div class="form-group">
                    <label asp-for="DefaultTaxRate" class="form-label"></label>
                    <div class="input-group">
                        <input inputmode="decimal" asp-for="DefaultTaxRate" class="form-control" />
                        <span class="input-group-text">%</span>
                    </div>
                    <div class="form-text" text-translate="true">This rate can also be overridden per item.</div>
                    <span asp-validation-for="DefaultTaxRate" class="text-danger"></span>
                </div>
            </fieldset>

            <fieldset id="discounts" class="mt-2">
                <legend class="h5 mb-3 fw-semibold" text-translate="true">Discounts</legend>
                <div class="form-group d-flex align-items-center">
                    <input asp-for="ShowDiscount" type="checkbox" class="btcpay-toggle me-3" />
                    <div>
                        <label asp-for="ShowDiscount" class="form-check-label"></label>
                        <div class="text-muted" text-translate="true">Not recommended for customer self-checkout.</div>
                    </div>
                    <span asp-validation-for="ShowDiscount" class="text-danger"></span>
                </div>
            </fieldset>
            <fieldset id="custom-payments" class="mt-2">
                <legend class="h5 mb-3 fw-semibold" text-translate="true">Custom Payments</legend>
                <div class="form-group mb-4 d-flex align-items-center">
                    <input asp-for="ShowCustomAmount" type="checkbox" class="btcpay-toggle me-3" data-bs-toggle="collapse" data-bs-target="#CustomAmountSettings" aria-expanded="@Model.ShowCustomAmount" aria-controls="CustomAmountSettings"/>
                    <label asp-for="ShowCustomAmount" class="form-check-label"></label>
                    <span asp-validation-for="ShowCustomAmount" class="text-danger"></span>
                </div>
                <div class="collapse @(Model.ShowCustomAmount ? "show" : "")" id="CustomAmountSettings">
                    <div class="form-group">
                        <label asp-for="CustomButtonText" class="form-label" data-required></label>
                        <input asp-for="CustomButtonText" class="form-control" required />
                        <span asp-validation-for="CustomButtonText" class="text-danger"></span>
                    </div>
                </div>
            </fieldset>
        </div>
    </div>
    <div class="row" style="margin-top:2.25rem;">
        <div class="col-xl-8 col-xxl-constrain">
            <h3 class="mb-2">Additional Options</h3>
            <div class="form-group">
                <div class="accordion" id="additional">

                    <div class="accordion-item">
                        <h2 class="accordion-header" id="additional-htmlheader-header">
                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#additional-htmlheader" aria-expanded="false" aria-controls="additional-htmlheader">
                                <span text-translate="true">HTML Headers</span>
                                <vc:icon symbol="caret-down" />
                            </button>
                        </h2>
                        <div id="additional-htmlheader" class="accordion-collapse collapse" aria-labelledby="additional-htmlheader-header">
                            <div class="accordion-body">
                                <div class="form-group">
                                    <label asp-for="HtmlLang" class="form-label"></label>
                                    <input asp-for="HtmlLang" class="form-control"/>
                                    <span asp-validation-for="HtmlLang" class="text-danger"></span>
                                </div>
                                <div class="form-group">
                                    <label asp-for="HtmlMetaTags" class="form-label"></label>
                                    <textarea asp-for="HtmlMetaTags" rows="5" cols="40" class="form-control"
                                              placeholder='<meta name="description" content="Your description">
<meta name="keywords" content="keyword1, keyword2, keyword3">
<meta name="author" content="John Doe">
Please insert valid HTML here. Only meta tags accepted.'>
                                    </textarea>
                                    <span asp-validation-for="HtmlMetaTags" class="text-danger"></span>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="accordion-item">
                        <h2 class="accordion-header" id="additional-embed-payment-button-header">
                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#additional-embed-payment-button" aria-expanded="false" aria-controls="additional-embed-payment-button">
                                <span text-translate="true">Embed a payment button linking to POS item</span>
                                <vc:icon symbol="caret-down" />
                            </button>
                        </h2>
                        <div id="additional-embed-payment-button" class="accordion-collapse collapse" aria-labelledby="additional-embed-payment-button-header">
                            <div class="accordion-body">
                                <p text-translate="true">You can host point of sale buttons in an external website with the following code.</p>
                                @if (Model.Example1 != null)
                                {
                                    <span text-translate="true">For anything with a custom amount</span>
                                    <pre class="p-3">@Model.Example1</pre>
                                }
                                @if (Model.Example2 != null)
                                {
                                    <span text-translate="true">For a specific item of your template</span>
                                    <pre class="p-3">@Model.Example2</pre>
                                }
                            </div>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <h2 class="accordion-header" id="additional-embed-pos-iframe-header">
                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#additional-embed-pos-iframe" aria-expanded="false" aria-controls="additional-embed-pos-iframe">
                                <span text-translate="true">Embed Point of Sale via iframe</span>
                                <vc:icon symbol="caret-down" />
                            </button>
                        </h2>
                        <div id="additional-embed-pos-iframe" class="accordion-collapse collapse" aria-labelledby="additional-embed-pos-iframe-header">
                            <div class="accordion-body">
                                <span text-translate="true">You can embed this POS via an iframe.</span>
                                @{
                                    var iframe = $"<iframe src='{Url.Action("ViewPointOfSale", "UIPointOfSale", new { appId = Model.Id }, Context.Request.Scheme)}' style='max-width: 100%; border: 0;'></iframe>";
                                }
                                <pre class="p-3">@iframe</pre>
                            </div>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <h2 class="accordion-header" id="additional-redirect-header">
                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#additional-redirect" aria-expanded="false" aria-controls="additional-redirect">
                                <span text-translate="true">Redirects</span>
                                <vc:icon symbol="caret-down" />
                            </button>
                        </h2>
                        <div id="additional-redirect" class="accordion-collapse collapse" aria-labelledby="additional-redirect-header">
                            <div class="accordion-body">
                                <div class="form-group">
                                    <label asp-for="RedirectUrl" class="form-label"></label>
                                    <input asp-for="RedirectUrl" class="form-control" />
                                    <span asp-validation-for="RedirectUrl" class="text-danger"></span>
                                </div>
                                <div class="form-group">
                                    <label asp-for="RedirectAutomatically" class="form-label"></label>
                                    <select asp-for="RedirectAutomatically" asp-items="Model.RedirectAutomaticallySelectList" class="form-select"></select>
                                    <span asp-validation-for="RedirectAutomatically" class="text-danger"></span>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <h2 class="accordion-header" id="additional-notification-header">
                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#additional-notification" aria-expanded="false" aria-controls="additional-notification">
                                <span text-translate="true">Notification URL Callbacks</span>
                                <vc:icon symbol="caret-down" />
                            </button>
                        </h2>
                        <div id="additional-notification" class="accordion-collapse collapse" aria-labelledby="additional-notification-header">
                            <div class="accordion-body">
                                <div class="form-group">
                                    <label asp-for="NotificationUrl" class="form-label"></label>
                                    <input asp-for="NotificationUrl" class="form-control" />
                                    <span asp-validation-for="NotificationUrl" class="text-danger"></span>
                                </div>
                                <p html-translate="true">A <code>POST</code> callback will be sent to the specified <code>notificationUrl</code> (for on-chain transactions when there are sufficient confirmations):</p>
                                <pre class="p-3">@Model.ExampleCallback</pre>
                                <p html-translate="true"><strong>Never</strong> trust anything but <code>id</code>, <strong>ignore</strong> the other fields completely, an attacker can spoof those, they are present only for backward compatibility reason:</p>
                                <ul>
                                    <li html-translate="true">Send a <code>GET</code> request to <code>https://btcpay.example.com/invoices/{invoiceId}</code> with <code>Content-Type: application/json; Authorization: Basic YourLegacyAPIkey"</code>, Legacy API key can be created with Access Tokens in Store settings</li>
                                    <li html-translate="true">Verify that the <code>orderId</code> is from your backend, that the <code>price</code> is correct and that <code>status</code> is <code>settled</code></li>
                                    <li text-translate="true">You can then ship your order</li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>

<div class="d-grid d-sm-flex flex-wrap gap-3 mt-3">
    <form method="post" asp-controller="UIApps" asp-action="ToggleArchive" asp-route-appId="@Model.Id">
        <button type="submit" class="w-100 btn btn-outline-secondary" id="btn-archive-toggle" permission="@Policies.CanModifyStoreSettings">
            @if (Model.Archived)
            {
                <span class="text-nowrap" text-translate="true">Unarchive this app</span>
            }
            else
            {
                <span class="text-nowrap" data-bs-toggle="tooltip" title="@StringLocalizer["Archive this app so that it does not appear in the apps list by default"]" text-translate="true">Archive this app</span>
            }
        </button>
    </form>
    <a id="DeleteApp" class="btn btn-outline-danger" asp-controller="UIApps" asp-action="DeleteApp" asp-route-appId="@Model.Id" data-bs-toggle="modal" data-bs-target="#ConfirmModal" data-description="@StringLocalizer["The app <strong>{0}</strong> and its settings will be permanently deleted.", Html.Encode(Model.AppName)]" data-confirm-input="@StringLocalizer["DELETE"]" permission="@Policies.CanModifyStoreSettings" text-translate="true">Delete this app</a>
</div>

<partial name="_Confirm" model="@(new ConfirmModel(StringLocalizer["Delete app"], StringLocalizer["This app will be removed from this store."], StringLocalizer["Delete"]))" permission="@Policies.CanModifyStoreSettings" />

<div class="modal fade" id="OpenPosModal" tabindex="-1" aria-labelledby="ConfirmTitle" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" text-translate="true">Scan the QR code to open the Point of Sale</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="@StringLocalizer["Close"]">
                    <vc:icon symbol="close"/>
                </button>
            </div>
            <div class="modal-body pt-0">
                <component type="typeof(BTCPayServer.Blazor.PosLoginCode)" render-mode="ServerPrerendered"
                           param-Users="@Model.StoreUsers"
                           param-PosPath="@posPath"
                           param-PosUrl="@posUrl"/>
            </div>
        </div>
    </div>
</div>
